import java.util.Scanner;
import java.util.Arrays;
public class Main {
    //测试数组的形参和实参
    public static void func2(int[] a,int num)
    {
        a[num-2]=10;
        System.out.println("修改后的形参："+a[num-2]);
    }

    //获取斐波那契数列的前n项
    public static int[] fib(int n)
    {
        if(n<1) return null;

        int[] array=new int[n];
        array[0]=array[1]=1;
        for(int i=2;i<n;i++)
        {
            array[i]=array[i-1]+array[i-2];
        }
        return array;
    }
    public static void func1()
    {
        System.out.println("数组的使用----------");
        //数组定义格式： 类型[] array=new 类型[长度]
        int[] arr1=new int[5];
        System.out.println("请输入五个数字");
        Scanner scanner=new Scanner(System.in);//输入语句的固定格式
        for (int i = 0; i < 5; i++) {
            arr1[i]=scanner.nextInt();//整数用scanner.nextInt()，像字符串那种用scanner.nextLine()
        }
        for (int i = 0; i < 5; i++) {
            System.out.print(arr1[i]+" ");
        }
        System.out.println();

        int[] arr2=new int[]{1,2,3,4,5};//这种定义也可以，编译器自动保存数据长度
        int len=arr2.length;//Java中可以用length获取数组长度，不用加括号，在C++中需要括号
        System.out.println("arr2数组的长度为"+len);//Java的输出用+连接
        //基本数据类型的形参和实参互不影响，但是数组是引用类型，它的形参和实参有影响
        int num=arr1.length;
        System.out.println("修改前的实参："+arr1[num-2]);
        func2(arr1,num);
        System.out.println("修改后的实参："+arr1[num-2]);
        int[] arr3=fib(10);
        System.out.println("斐波那契数列：");
        for (int i = 0; i < arr3.length; i++) {
            System.out.print(arr3[i]+" ");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        func1();
        System.out.println("数组转成字符串：");
        int[] arr1=new int[]{1,2,3,4,5};
        String arr=Arrays.toString(arr1);//使用Array.toString()进行数组向字符串的转换
        System.out.println(arr);
        System.out.println("数组的拷贝：");
        int[] a=new int[]{1,2,3,4};
        System.out.println("修改前 a:"+Arrays.toString(a));
        int[] a1=a;//此时的a1与a指向的是同一组数据，一个改变，另一个也随之改变
        a1[0]=10;
        System.out.println("修改后 a:"+Arrays.toString(a));
        int[] a2=Arrays.copyOf(a,a.length);//此时a2与a指向的位置不同，分别是两组数据，他们互不干扰
        a[0]=1;
        System.out.println("还原后a2:"+Arrays.toString(a2));
        }
}